package 面试;

public class 最长公共后缀 {


    public static void main(String[] args) {
        String[] strs = new String[] {
                "acc",
                "aac",
                "acac"
        };
        String[] strs2 = new String[] {
                "acc",
                "aac",
                "acac",
                ""
        };
        String[] strs3 = new String[] {
                "acc",
                "aac",
                "acacv"
        };
        String[] strs4 = new String[] {
                "acc",
                "acc",
                "acc"
        };
        System.out.println(longestCommonSuffix(strs4));
    }

    /**
     * 找出字符串数组中最长的公共后缀。
     * @param strs 字符串数组
     * @return 有公共后缀则返回，没有就返回""
     */
    public static String longestCommonSuffix(String[] strs) {
        /* 解题原理：只需要拿 str[0]比较即可
            从后往前比较str[0]的各个字符与其他字符串的各个字符
            然后记录相同字符的个数 len
            截取最后 len 个字符就是公共后缀了
        */
        int len = 0;
        if (strs.length == 0 || strs[0].equals("") || strs[0] == null) {
            return "";
        }
        if (strs.length == 1) {
            return strs[0];
        }
        boolean continueProgream = true;
        for (int k = 1; k < strs.length; k++) {
            if (continueProgream == false) {
                break;
            }
            // 记录本次比较的公共字符相同个数
            int l = 0;
            // 比较当前字符串的各个字符是否与另外的字符串的各个字符相同
            int count = strs[k].length() - 1;
            for (int i = strs[0].length() - 1; i >= 0; i--) {

                try {
                    // 越界问题不管即可
                    if (strs[0].charAt(i) == strs[k].charAt(count--)) {
                        l++;
                    } else {
                        // 如果从下标为最后开始两个字符就是不一样的话，则结束程序
                        if (i == strs[0].length() - 1) {
                            continueProgream = false;
                        }
                        break;
                    }
                    // 首次比较要给len赋初值
                    if (k == 1) {
                        len = l;
                    }
                } catch (Exception e) {
                    break;
                }
            }
            // 每比较一个字符串后要取最小的len
            if (l < len) {
                len = l;
            }
        }
        int start = strs[0].length() - len;
        int end = strs[0].length();
        return strs[0].substring(start, end);
    }
}
